# -*- coding: utf-8 -*-
import scrapy

#导入items
from tencent.items import TencentItem   #(如果不标记为根目录，会报错，其实运行起来没有问题)
"""
pycharm以为我们在projects下面执行文件，其实不是，我们实际时在最外层的Tencent下面执行文件
错：from tencent.tencent.items import TencentItem(如果不标记为根目录，会报错，其实运行起来没有问题)
"""


class HrSpider(scrapy.Spider):
    name = 'hr'  # 爬虫名字<爬虫启动时候使用:scrapy crawl itcast>
    # 允许爬取的范围,防止爬虫爬到了别的网站
    allowed_domains = ['tencent.com']
    # 开始爬取的地址,下载中间件提取网页数据
    start_urls = ['https://hr.tencent.com/position.php']

    # 数据提取方法,接收下载中间件传过来的response(响应)
    def parse(self, response):
        # 处理start_url地址对应的响应
        # 提取数据
        # reti = response.xpath("//div[@class='tea_con']//h3/text()").extract()
        # print(reti)

        # 分组,[1:-1]切片,不要第一条数据
        tr_list = response.xpath('//table[@class="tablelist"]/tr')[1: -1]
        for tr in tr_list:
            # 在item中定义要爬取的字段,以字典形式传入
            # item = TencentItem()
            item = {}
            item["name"] = tr.xpath("./td[1]/text()").extract_first()   #这里td[1]，下标从1开始，而不是从0开始
            item["position"] = tr.xpath("./td[2]/text()").extract_first()
            item["publish_date"] = tr.xpath("./td[5]/text()").extract_first()   #据说还可以写td[last]???
            # yield可以返回request对象，BaseItem(items.py中的类),dict,None
            yield item  # yield传到pipeline

            """
            第二种方法（推荐）
            item = TencentItem()
            item["name"] = tr.xpath("./td[1]/text()").extract_first()  
            item["position"] = tr.xpath("./td[2]/text()").extract_first()
            item["publish_date"] = tr.xpath("./td[5]/text()").extract_first()  
            yield item
            """
        # 找到下一页url地址
        next_url = response.xpath('//a[@id="next"]/@href').extract_first()
        # 如果url地址的href="地址"不等于javascript:;
        if next_url != "javascript:;":
            next_url = "https://hr.tencent.com/" + next_url     #鼠标悬停，可以看到下一页的完整网址
            # 把next_url的地址通过回调函数callback交给parse方法处理
            # 这里yield一个request对象（4种：None值，dict，baseitem，request对象）
            yield scrapy.Request(
                next_url,
                callback=self.parse,
                #因为下一页的处理方式跟上一页（第一页）完全相同，类似于“函数递归”
                #如果不一样，定义一个新的函数处理
            )


    #         yield scrapy.Request(
    #             next_url,
    #             callback=self.parse_1,
    #             meta = {"item":item}
    #             #因为下一页的处理方式跟上一页（第一页）完全相同，类似于“函数递归”
    #             #如果不一样，定义一个新的函数处理
    #         )
    #
    # def parse_1(self,response):
    #     response.meta["item"]   #取到parse函数中的item
    #


"""实现翻页请求"""


"""
注意1：在cmd里面执行程序，不建议在pycharm-terminal里面执行
"""
